/**
 * URL 参数 + 本地存储 通用工具
 * 支持：普通URL参数、Hash模式query参数、localStorage缓存
 */
const UrlStorage = {
  /**
   * 获取URL参数（优先级：普通URL参数 > Hash query参数）
   * @param {string} key - 要获取的参数名
   * @returns {string} 参数值（无则返回空字符串）
   */
  getUrlParam: (key) => {
    if (typeof window === 'undefined') return ''

    // 1. 解析普通URL参数（?key=value）
    const searchParams = new URLSearchParams(window.location.search)
    const searchValue = searchParams.get(key)
    if (searchValue) return searchValue

    // 2. 解析Hash中的query参数（#/path?key=value 或 #path?key=value）
    const hash = window.location.hash
    if (!hash) return ''

    const hashQueryStart = hash.indexOf('?')
    if (hashQueryStart === -1) return ''

    const hashQuery = hash.slice(hashQueryStart + 1)
    const hashParams = new URLSearchParams(hashQuery)
    return hashParams.get(key) || ''
  },

  /**
   * 保存数据到localStorage
   * @param {string} key - 存储键名
   * @param {string} value - 存储值
   * @param {number} expiresIn - 过期时间（秒，可选）
   */
  setStorage: (key, value, expiresIn) => {
    if (typeof window === 'undefined' || !key || !value) return

    const storageData = {
      value,
      ...(expiresIn && { expiresAt: Date.now() + expiresIn * 1000 }) // 过期时间戳
    }
    localStorage.setItem(key, JSON.stringify(storageData))
  },

  /**
   * 从localStorage获取数据
   * @param {string} key - 存储键名
   * @returns {string} 存储值（过期/无数据返回空字符串）
   */
  getStorage: (key) => {
    if (typeof window === 'undefined' || !key) return ''

    const storageStr = localStorage.getItem(key)
    if (!storageStr) return ''

    try {
      const storageData = JSON.parse(storageStr)
      // 检查是否过期
      if (storageData.expiresAt && Date.now() > storageData.expiresAt) {
        localStorage.removeItem(key) // 清除过期数据
        return ''
      }
      return storageData.value || ''
    } catch (err) {
      console.error(`[UrlStorage] 解析${key}失败:`, err)
      localStorage.removeItem(key)
      return ''
    }
  },

  /**
   * 移除localStorage中的数据
   * @param {string} key - 存储键名
   */
  removeStorage: (key) => {
    if (typeof window === 'undefined' || !key) return
    localStorage.removeItem(key)
  },

  /**
   * 清除所有localStorage数据（谨慎使用）
   */
  clearStorage: () => {
    if (typeof window === 'undefined') return
    localStorage.clear()
  }
}

export default UrlStorage